﻿//IPositionStatisticParameter.cs
//Copyright (c) 2013 StockSharp LLC, all rights reserved.
//This code module is part of StockSharp library.
//This code is licensed under the GNU GENERAL PUBLIC LICENSE Version 3.
//See the file License.txt for the license details.
//More info on: http://stocksharp.com

namespace StockSharp.Algo.Statistics
{
	using System;
	using System.ComponentModel;

	using Ecng.Common;

	/// <summary>
	/// Интерфейс, описывающий параметр статистики, рассчитывающийся на основе позиции.
	/// </summary>
	public interface IPositionStatisticParameter
	{
		/// <summary>
		/// Добавить в параметр новое значение позиции.
		/// </summary>
		/// <param name="marketTime">Биржевое время.</param>
		/// <param name="position">Новое значение позиции.</param>
		void Add(DateTime marketTime, decimal position);
	}

	/// <summary>
	/// Максимальный размер длинной позиции.
	/// </summary>
	[DisplayName(@"Максимальный размер длинной позиции")]
	public class MaxLongPositionParameter : BaseStatisticParameter<decimal>, IPositionStatisticParameter
	{
		/// <summary>
		/// Добавить в параметр новое значение позиции.
		/// </summary>
		/// <param name="marketTime">Биржевое время.</param>
		/// <param name="position">Новое значение позиции.</param>
		public void Add(DateTime marketTime, decimal position)
		{
			if (position > 0)
				Value = position.Max(Value);
		}
	}

	/// <summary>
	/// Максимальный размер короткой позиции.
	/// </summary>
	[DisplayName(@"Максимальный размер короткой позиции")]
	public class MaxShortPositionParameter : BaseStatisticParameter<decimal>, IPositionStatisticParameter
	{
		/// <summary>
		/// Добавить в параметр новое значение позиции.
		/// </summary>
		/// <param name="marketTime">Биржевое время.</param>
		/// <param name="position">Новое значение позиции.</param>
		public void Add(DateTime marketTime, decimal position)
		{
			if (position < 0)
				Value = position.Abs().Max(Value);
		}
	}
}